In a software-defined network (SDN) architecture, the control plane that implements important network routing and switching functionalities and the data forwarding plane are decoupled. The control plane can be logically centralized and implemented with a variety of hardware components of varied architectures. The data plane may utilize inexpensive and simplified network switches or routers configurable by a SDN controller as a result. The SDN paradigm has increasingly gained popularity in both research and commercial environments due to its scalability, cost-efficiency, reliability, and flexibility in customizing and optimizing network services to specific user needs.
An SDN enables an Information Technology (IT) organization to move to a scale-out model of networking whereby network functionality can be added when needed, and the SDN controller enables the organization to manage all the networking functionalities in a centralized manner. However, the conventional centralized control methodology in an SDN also suffers from the limitation of the number of network devices, e.g., switches or routers, that a central controller can support, which unfortunately limits the scalability and expandability of the SDNs. Therefore, the applications of the SDNs are undesirably limited to relatively small scale networks. Conventionally, in a wide area network (WAN), the SD controllers of different subnetworks are linked and communicate to each other by relying on hardware facilities. Thus, it is difficult to manage the whole WAN comprehensively in software.
One standard for flow processing in an SDN is OpenFlow, which defines the protocol used to transport messages between the control plane and the forwarding plane and describes a model for packet processing. For instance, when a packet arrives at an OpenFlow switch, the header fields are compared to flow table entries. If a match is found, the packet is processed according to the corresponding actions specified in the flow table, e.g., forwarded to a specified port or dropped. When an OpenFlow switch receives a packet that does not match any entry in the flow table, it encapsulates the packet and sends it to the controller. The controller then decides how the packet should be handled and notifies the switch to drop the packet or to make a new entry in the flow table to support the new flow.
Traditional SDN system typically maintains a predefined network map. If a packet need to be sent to a network node that is not included in the predefined network map, a router or virtual router send a request to the controller which can update the network map in response. To reduce latency, the network map needs to be updated rapidly, e.g., in the order of milliseconds, which unfortunately is difficult to achieve. Thus, the conventional SDN network is typically sensitive to latency.